package com.yang.annotation;

import java.lang.annotation.*;

/**
 * @author yds
 * @program java-annotation-and-reflection
 * @description 注解类的初步学习三大标准注解和四大元注解
 * @create 2020-10-10 14:02
 **/
@myAnnotation(value = "2222", age = 2)
public abstract class annotation {

    @myAnnotation(value = "2222", age = 2)
    public static void main(String[] args) {

    }

    public String test() {
        return null;
    }
}

/**
 * java         四大元注解
 *
 * @Target 注解可以作用到目标 接口 类 方法等
 * @Documented 是否作为java文档记录
 * @Retention 注解作用域 源码SOURCE<CLASS<RUNTIME 运行时
 * @Inherited 允许子类继承父类中的注解
 * param
 * String value();
 * int age();
 * boolean sex() default false;
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@interface myAnnotation {
    String value();

    int age();

    boolean sex() default false;
}

class test extends annotation {
    /*
       三大标准注解
       @Override，表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误，或者方法签名对不上被覆盖的方法，编译器就会发出错误提示。
       @Deprecated，如果程序员使用了注解为它的元素，那么编译器会发出警告信息。
       @SuppressWarnings，关闭不当的编译器警告信息。在java SE5之前的版本中，也可以使用该注解，不过会被忽略不起作用。
     */
    @Override
    @SuppressWarnings(value = "unchecked")
    public String test() {
        String a = "";
        return null;
    }
}